此事件在Worker
进程/Task
进程启动时发生。这里创建的对象可以在进程生命周期内使用。原型:
function onWorkerStart(swoole_server $server, int $worker_id);
1.6.11
之后Task
进程中也会触发onWorkerStart
事件- 发生致命错误或者代码中主动调用
exit
时,Worker
/Task
进程会退出,管理进程会重新创建新的进程 onWorkerStart
/onStart
是并发执行的,没有先后顺序- 可以通过
$server->taskworker
属性来判断当前是Worker
进程还是Task
进程
下面的示例用于为Worker
进程/Task
进程重命名。
$serv->on('WorkerStart', function ($serv, $worker_id){
global $argv;
if($worker_id >= $serv->setting['worker_num']) {
swoole_set_process_name("php {$argv[0]} task worker");
} else {
swoole_set_process_name("php {$argv[0]} event worker");
}
});
如果想使用Reload
机制实现代码重载入,必须在onWorkerStart
中require
你的业务文件,而不是在文件头部。在onWorkerStart
调用之前已包含的文件,不会重新载入代码。
可以将公用的、不易变的php文件放置到
onWorkerStart
之前。这样虽然不能重载入代码,但所有Worker
是共享的,不需要额外的内存来保存这些数据。
onWorkerStart
之后的代码每个进程都需要在内存中保存一份
$worker_id
是一个从0-$worker_num
之间的数字,表示这个Worker
进程的ID
$worker_id
和进程PID
没有任何关系,可使用posix_getpid
函数获取PID
2.1.0
版本onWorkerStart
回调函数中创建了协程,在onWorkerStart
可以调用协程API